òɾۿûѧϰʹá
ԭַhttps://www.joinquant.com/post/11101

ԭһ˵ʽ鵽ԭĺ߽ۡ


ԭĲԴ£

import talib
import math
import numpy as np
import pandas as pd

# ʼ趨ҪĹƱ׼ȵ
def initialize(context):
    g.security = '399300.XSHE'
    set_benchmark('399300.XSHE')
    
    #ò
    context.OBSERVATION = 100  
    context.ADXPERIOD = 18
    

# ÿλʱ(ز,ÿһ,,ÿӵһ)һ
def handle_data(context, data):
    security = g.security  
    # ȡƱļ۸Ϣ
    price = attribute_history(security, context.OBSERVATION, '1d', ('high','low','close'))

    ADX = talib.ADX(price['high'].values,price['low'].values,price['close'].values, context.ADXPERIOD)
    PDI = talib.PLUS_DI(price['high'].values,price['low'].values,price['close'].values, context.ADXPERIOD)
    NDI = talib.MINUS_DI(price['high'].values,price['low'].values,price['close'].values, context.ADXPERIOD)
    
    current_price = data[security].close
    current_position = context.portfolio.positions[security].closeable_amount
    cash = context.portfolio.cash
    
    print(security) 
    if current_price !=0:
        shares = cash/current_price
    
    record(ADX=ADX[-1])
    record(Plus_DI=PDI[-1])
    record(Minus_DI=NDI[-1])
    
    #ADXУ+DI>-DIǰղ֣ȫ
    if ADX[-1]>ADX[-2] and PDI[-1]>NDI[-1] and current_position <= 0:
        order_value(security,cash)
        log.info("Buying %s" % (security))#¼Ϣ
    #ADXУ+DI<-DI
    if ADX[-1]<ADX[-2] and PDI[-1]<NDI[-1] and current_position > 0:
        order_target(security, 0)
        log.info("Selling %s" % (security))
    #ٶϽ˵ADX50ᷢתʵЧѡ
    # if ADX[-1]>50:
    #     order_target(security, 0)
    #     log.info("Selling %s" % (security))
    

